mpMUD object containership system

 Objects may theoretically have any 'shape' for the purpose of collision detection, but will in practice be limited to ellipsoids and boxes.
 Objects have mass and density.
 There can be containers created for internal purposes; it should be possible for containers to be completely imperceptible to the player.
 All objects are at some point contained in the 'root object'.
 A container may specify that it does not contain a coordinate system, e.g. a bag. The contents are assumed to be packed with slightly less than optimum efficiency.
Objects can have 'holes' in them, specified by shapes subtracting from the object's surface. The 'holes' can either lead to the outer container, or directly into another container. Holes should be able to have names, for entering them.
 Landscape containers should extend upward to the maximum distance at which their features are visible. This makes it easy to support flying, but there may be problems in generating descriptions of the landscape below.
 Objects should be able to be rotated around the Y axis, at least. Possible support for 3D rotations.


 Box intersection:
Determine the bounding box of the other object.
Check range of its coordinates.
 Sphere intersection:
Find nearest point on other object (equal to radius if it's a sphere).
Check if it is inside the sphere's radius.
 Ellipsoid intersection:
Scale all coordinates to make the ellipsoid into a sphere.
Perform sphere intersection.

Effect propagation (sound, visibility, fireball, etc):
1. Determine the maximum radius at which the effect occurs
2. Cause the effect on all objects in the same container that are within the radius
3. If the effect sphere intersects the boundaries of the container:
  31. Go to step 2, but applied to objects outside the container.
 
An expanding fireball (i.e. non-effectively-instantaneous travel) could be simulated by creating a series of spherical effects, bounded but without falloff, with each one larger than the last, but with less power.

An ellipsoid:
  (x/X)**2 + (y/Y)**2 + (z/Z)**2 < 1
  where x,y,z are coordinates and X,Y,Z are the dimensions of the ellipsoid.
  
  
Um: How do you handle freeform emotes in a world with light/sound propagation?